package com.ruoyi.system.api.mapper;

import com.ruoyi.system.api.domain.PlanDetails;
import com.ruoyi.system.api.domain.ServiceDetails;
import com.ruoyi.system.api.domain.TaskPush;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 工程师FSE计划详情 工程师FSE计划详情Mapper接口
 * 
 * @author ruoyi
 * @date 2020-03-03
 */
public interface PlanDetailsMapper
{
    /**
     * 查询工程师FSE计划详情 工程师FSE计划详情
     * 
     * @param id 工程师FSE计划详情 工程师FSE计划详情ID
     * @return 工程师FSE计划详情 工程师FSE计划详情
     */
    public PlanDetails selectStPlanDetailsById(Long id);

    /**
     * 查询工程师FSE计划详情 工程师FSE计划详情列表
     * 
     * @param stPlanDetails 工程师FSE计划详情 工程师FSE计划详情
     * @return 工程师FSE计划详情 工程师FSE计划详情集合
     */
    public List<PlanDetails> selectStPlanDetailsList(PlanDetails stPlanDetails);

    /**
     * 查询工程师FSE计划详情 工程师FSE计划详情列表
     *
     * @param stPlanDetails 工程师FSE计划详情 工程师FSE计划详情
     * @return 工程师FSE计划详情 工程师FSE计划详情集合
     */
    public List<PlanDetails> selectStPlanDetailsListByState(PlanDetails stPlanDetails);
    /**
     * 新增工程师FSE计划详情 工程师FSE计划详情
     * 
     * @param stPlanDetails 工程师FSE计划详情 工程师FSE计划详情
     * @return 结果
     */
    public int insertStPlanDetails(PlanDetails stPlanDetails);

    /**
     * 修改工程师FSE计划详情 工程师FSE计划详情
     * 
     * @param stPlanDetails 工程师FSE计划详情 工程师FSE计划详情
     * @return 结果
     */
    public int updateStPlanDetails(PlanDetails stPlanDetails);

    /**
     * 删除工程师FSE计划详情 工程师FSE计划详情
     * 
     * @param id 工程师FSE计划详情 工程师FSE计划详情ID
     * @return 结果
     */
    public int deleteStPlanDetailsById(Long id);

    /**
     * 批量删除工程师FSE计划详情 工程师FSE计划详情
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteStPlanDetailsByIds(String[] ids);

    /**
     * 获取员工服务单各种状态的数量接口
     * @methodName: getFseStateCounts
     * @description: TODO
     * @param EnginnerId
     * @return: java.util.List<com.ruoyi.system.api.domain.ServiceDetails>
     * @author: shihx
     * @date: 2020/3/6 8:35
    **/
    public List<ServiceDetails> getFseStateCounts(@Param(value="EnginnerId") String EnginnerId);

    /**
     * 获取FSE计划安排接口
     * @methodName: getFsePlan
     * @description: TODO
     * @param EnginnerId
     * @param StartTime
     * @param EndTime
     * @return: java.util.List<com.ruoyi.system.api.domain.PlanDetails>
     * @author: shihx
     * @date: 2020/3/6 14:51
    **/
    public List<PlanDetails> getFsePlan(
            @Param(value="EnginnerId") String EnginnerId,
            @Param(value="StartTime") String StartTime,
            @Param(value="EndTime") String EndTime,
            @Param(value="customerName") String customerName
    );

    /**
     * 服务单第一次接受和拒绝的时候调用
     * @methodName: updateMyPlanDetails
     * @description: TODO
     * @param stPlanDetails
     * @return: int
     * @author: shihx
     * @date: 2020/3/7 9:53
    **/
    public int updateMyPlanDetails(PlanDetails stPlanDetails);


    /**
     *  更新服务通知状态
     * @methodName: updateMyPlanDetails
     * @description: TODO
     * @param planDetails
     * @return: int
     * @author: shihx
     * @date: 2020/3/7 9:53
     **/
    public int updatePlanDetailsByID(PlanDetails planDetails);



    /**
     * 查询已签到的数据
     * @methodName: getFseSignIn
     * @description: TODO
     * @param EnginnerId
     * @param ServiceNoticeId
     * @param state
     * @return: java.util.List<com.ruoyi.system.api.domain.PlanDetails>
     * @author: shihx
     * @date: 2020/3/9 11:06
    **/
    public List<PlanDetails> getFseSignIn(
            @Param(value="EnginnerId") String EnginnerId,
            @Param(value="ServiceNoticeId") String ServiceNoticeId,
            @Param(value="state") String state
    );

    /**
     * 接受服务单、签到服务单、签离服务单、填写工作日志 查询关联服务单接口
     * @methodName: AssociatedCustomers
     * @description: TODO
     * @param EnginnerId
     * @param customerName
     * @param signInTime
     * @param signIn
     * @param fillInLog
     * @param state
     * @return: java.util.List<com.ruoyi.system.api.domain.PlanDetails>
     * @author: shihx
     * @date: 2020/3/11 9:46
    **/
    public List<PlanDetails> AssociatedCustomers(
            @Param(value="EnginnerId") String EnginnerId,
            @Param(value="customerName") String customerName,
            @Param(value="signInTime") String signInTime,
            @Param(value="signIn") String signIn,
            @Param(value="fillInLog") String fillInLog,
            @Param(value="state") String state,
            @Param(value="planId") String planId
    );

    /**
     * 接受服务单、签到服务单、签离服务单、填写工作日志 查询关联服务单接口
     * @methodName: AssociatedCustomers
     * @description: TODO
     * @param EnginnerId
     * @param customerName
     * @param signInTime
     * @param signIn
     * @param fillInLog
     * @param state
     * @return: java.util.List<com.ruoyi.system.api.domain.PlanDetails>
     * @author: shihx
     * @date: 2020/3/11 9:46
     **/
    public List<PlanDetails> AssociatedCustomersByBatch(
            @Param(value="EnginnerId") String EnginnerId,
            @Param(value="serviceNotice") String serviceNotice,
            @Param(value="customerName") String customerName,
            @Param(value="signInTime") String signInTime,
            @Param(value="signIn") String signIn,
            @Param(value="fillInLog") String fillInLog,
            @Param(value="state") String state,
            @Param(value="planId") String planId
    );

    /**
     * 查询服务详情
     * @methodName: getPlanDetails
     * @description: TODO
     * @param stPlanDetails
     * @return: java.util.List<com.ruoyi.system.api.domain.PlanDetails>
     * @author: sjy
     * @date: 2020年3月9日18:04:12
     **/
    public PlanDetails getPlanDetails(PlanDetails stPlanDetails);




    /**
     * 查询服务详情最新的签到记录
     * @methodName: getPlanDetails
     * @description: TODO
     * @param stPlanDetails
     * @return: java.util.List<com.ruoyi.system.api.domain.PlanDetails>
     * @author: sjy
     * @date: 2020年3月9日18:04:12
     **/
    public PlanDetails getPlanDetailsBySignIn(PlanDetails stPlanDetails);


    /**
     * 查询服务详情最新的签到记录
     * @methodName: getPlanDetails
     * @description: TODO
     * @param stPlanDetails
     * @return: java.util.List<com.ruoyi.system.api.domain.PlanDetails>
     * @author: sjy
     * @date: 2020年3月9日18:04:12
     **/
    public PlanDetails getPlanDetailsBySignInByNoticeId(PlanDetails stPlanDetails);



    /**
     * 查询工作计划
     * @methodName: selectFseWorkPlan
     * @description: TODO
     * @param param
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: wlf
     * @date: 2020年3月20日11:03:12
     **/
    List<Map> selectFseWorkPlan(Map<String, String> param);

    /**
     * 修改工作计划
     * @methodName: selectFseWorkPlan
     * @description: TODO
     * @param planDetails
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: wlf
     * @date: 2020年3月26日13:34:12
     **/
    int updatePlanWidthIds(Map<String, String> planDetails);

    /**
     * 定时器 待上门推送查询
     * @methodName: getWaitingForTheDoor
     * @description: TODO
     * @param taskPush
     * @return: java.util.List<com.ruoyi.system.api.domain.TaskPush>
     * @author: shihx
     * @date: 2020-04-02 10:31
    **/
    List<TaskPush> getWaitingForTheDoor(TaskPush taskPush);

    /**
     * 定时器推送更新 包含待上门、待签到2种情况、待签离两种情况
     * @methodName: updateTaskPlanDetail
     * @description: TODO
     * @param taskPush
     * @return: int
     * @author: shihx
     * @date: 2020-04-05 9:09
    **/
    int updateTaskPlanDetail(TaskPush taskPush);

    /**
     * 定时器 待签到第一种情况查询
     * 1、如果到预计上门时间该客户还未签到操作，系统可提示其签到。
     * @methodName: getSignIn1
     * @description: TODO
     * @param taskPush
     * @return: java.util.List<com.ruoyi.system.api.domain.TaskPush>
     * @author: shihx
     * @date: 2020-04-02 15:10
    **/
    List<TaskPush> getSignIn1(TaskPush taskPush);

    /**
     * 定时器 待签到第二种情况查询
     * 2、预计上门时间n分钟后距离当日计划服务客户n公里内提示是否签到。
     * @methodName: getSignIn2
     * @description: TODO
     * @param taskPush
     * @return: java.util.List<com.ruoyi.system.api.domain.TaskPush>
     * @author: shihx
     * @date: 2020-04-05 16:50
    **/
    List<TaskPush> getSignIn2(TaskPush taskPush);



    /**
     * 定时器 确定开始推送时间
     * @methodName: getSignIn2
     * @description: TODO
     * @param taskPush
     * @return: java.util.List<com.ruoyi.system.api.domain.TaskPush>
     * @author: shihx
     * @date: 2020-04-05 16:50
     **/
    List<TaskPush> getSignOffStartTime(TaskPush taskPush);


    /**
     * 定时器 待签离第一种情况查询
     * 1、根据预计离开时间，提醒工程师签离。
     * @methodName: getSignOff1
     * @description: TODO
     * @param taskPush
     * @return: java.util.List<com.ruoyi.system.api.domain.TaskPush>
     * @author: shihx
     * @date: 2020-04-05 17:44
    **/
    List<TaskPush> getSignOff1(TaskPush taskPush);

    /**
     * 定时器 待签离第二种情况查询
     * 2、离开签到客户n公里范围外n分钟，提示签离。
     * @methodName: getSignOff2
     * @description: TODO
     * @param taskPush
     * @return: java.util.List<com.ruoyi.system.api.domain.TaskPush>
     * @author: shihx
     * @date: 2020-04-05 18:00
    **/
    List<TaskPush> getSignOff2(TaskPush taskPush);


    /**
     * 定时器 待签离第二种情况查询
     * 2、离开签到客户n公里范围外n分钟，提示签离。
     * @methodName: getSignOff2
     * @description: TODO
     * @param taskPush
     * @return: java.util.List<com.ruoyi.system.api.domain.TaskPush>
     * @author: shihx
     * @date: 2020-6-8 15：30 调整
     **/
    List<TaskPush> getSignOff3(TaskPush taskPush);

    /**
     * 定时器 待写日志情况查询
     * @methodName: getFillInLog
     * @description: TODO
     * @param taskPush
     * @return: java.util.List<com.ruoyi.system.api.domain.TaskPush>
     * @author: shihx
     * @date: 2020-04-07 10:36
    **/
    List<TaskPush> getFillInLog(TaskPush taskPush);

    /**
     * 定时器 自动签离推送
     * @methodName: getSignOffAutoPush
     * @description: TODO
     * @param taskPush
     * @return: java.util.List<com.ruoyi.system.api.domain.TaskPush>
     * @author: shihx
     * @date: 2020-04-07 13:07
    **/
    List<TaskPush> getSignOffAutoPush(TaskPush taskPush);

    /**
     * 定时器 到时间后自动签离
     * @methodName: getSignOffAuto
     * @description: TODO
     * @param taskPush
     * @return: java.util.List<com.ruoyi.system.api.domain.TaskPush>
     * @author: shihx
     * @date: 2020-04-07 13:58
    **/
    List<TaskPush> getSignOffAuto(TaskPush taskPush);

    /**
     * TL查询下级FSE未填写日志的数据
     * @methodName: fseFillLogCount
     * @description: TODO
     * @param enginnerId
     * @return: java.util.List<com.ruoyi.system.api.domain.PlanDetails>
     * @author: shihx
     * @date: 2020-04-09 17:17
    **/
    public List<PlanDetails> fseFillLogCount(
            @Param(value="enginnerId") String enginnerId
    );

    /**
     * 验证预计上门时间是否重复
     * @methodName: checkPlanDetailsList
     * @description: TODO
     * @param stPlanDetails
     * @return: java.util.List<com.ruoyi.system.api.domain.PlanDetails>
     * @author: shihx
     * @date: 2020-04-14 15:44
    **/
    public List<PlanDetails> checkPlanDetailsList(PlanDetails stPlanDetails);

    /**
     * 工作计划——根据ids查询任务列表
     * @param params
     * @return
     */
    List<PlanDetails> selectWorkPlanList(Map<String, Object> params);
    /**
     * 根据服务号和员工ID逻辑删除和恢复数据
     * @methodName: updateDelPlanDetail
     * @description: TODO
     * @param planDetails
     * @return: int
     * @author: shihx
     * @date: 2020-04-21 8:49
    **/
    public int updateDelPlanDetail(PlanDetails planDetails);

    /**
     * 有下次预计上门查询最后一次签离的ID
     * @methodName: selectOldPlanDetailId
     * @description: TODO
     * @param planDetails
     * @return: java.util.List<com.ruoyi.system.api.domain.PlanDetails>
     * @author: shihx
     * @date: 2020-04-25 16:44
    **/
    public List<PlanDetails> selectOldPlanDetailId(PlanDetails planDetails);
    /**
     * 查询未签离的报告的次数
     * @methodName: selectOldPlanDetailId
     * @description: TODO
     * @param planDetails
     * @return: java.util.List<com.ruoyi.system.api.domain.PlanDetails>
     * @author: bairuihua
     * @date: 2020-05-31 21:44
     **/
    int  selectNoClosedNum(@Param("serviceNo") String serviceNo,@Param("EnginnerId") String EnginnerId);
    /**
     * 工作计划——根据ids查询任务列表完善
     * @param params
     * @return
     */
    List<PlanDetails> selectWorkPlanListModify(Map<String, Object> params);
}
